﻿using System.ComponentModel.DataAnnotations;
using Tanmia.Basis.Core;

namespace Tanmia.Warehouse.Core
{
    /// <summary>
    /// تصانيف المواد
    /// </summary>
    public partial class ItemCategory : BaseBusinessObject, ICategorizable
    {
        public const string HeadName = "<تصنيف رئيسي>";
        public static readonly ItemCategory HeadItem = new ItemCategory { itemCategoryID = -1, name = HeadName, engName = "<Main Category>" };

        private int itemCategoryID;
        private string notes;
        private ItemCategory parent;

        /// <summary>
        /// رقم تعريف تصنيف المادة
        /// </summary>
        [Display(Name = "رقم التصنيف: ", ShortName = "رقم التصنيف", Order = 0, AutoGenerateField = true)]
        public virtual int ItemCategoryID
        {
            get { return itemCategoryID; }
            set { SetValue<int>("ItemCategoryID", ref itemCategoryID, value); }
        }

        /// <summary>
        /// ملاحظات
        /// </summary>
        [Display(Name = "ملاحظات: ", ShortName = "ملاحظات", Order = 6, AutoGenerateField = true)]
        public virtual string Notes
        {
            get { return notes; }
            set { SetValue<string>("Notes", ref notes, value); }
        }

        /// <summary>
        /// أب تصنيف المواد الحالي, وذلك من أجل إنشاء بنية شجرية للتصانيف الخاصة بالمواد
        /// </summary>
        [Display(Name = "الأب: ", ShortName = "الأب", Order = 6, AutoGenerateField = false)]
        public virtual ItemCategory Parent
        {
            get { return parent; }
            set { SetValue<ItemCategory>("Parent", ref parent, value); }
        }

        #region ICategorizable Members

        private string name;
        private string engName;
        private string code;
        private string number;

        /// <summary>
        /// اسم تصنيف المواد
        /// </summary>
        [Display(Name = "اسم التصنيف: ", ShortName = "اسم التصنيف", Order = 3, AutoGenerateField = true)]
        [Required(AllowEmptyStrings = false, ErrorMessage = "يجب ادخال اسم التصنيف.")]
        public virtual string Name
        {
            get { return name; }
            set { SetValue<string>("Name", ref name, value); }
        }

        /// <summary>
        /// الاسم الأجنبي لتصنيف المواد
        /// </summary>
        [Display(Name = "الأسم الأجنبي: ", ShortName = "الاسم الأجنبي", Order = 4, AutoGenerateField = true)]
        public virtual string EngName
        {
            get { return engName; }
            set { SetValue<string>("EngName", ref engName, value); }
        }

        /// <summary>
        /// رمز تصنيف المواد
        /// </summary>
        [Display(Name = "رمز التصنيف: ", ShortName = "رمز التصنيف", Order = 5, AutoGenerateField = true)]
        public virtual string Code
        {
            get { return code; }
            set { SetValue<string>("Code", ref code, value); }
        }

        /// <summary>
        /// رقم تصنيف المواد
        /// </summary>
        [Display(Name = "رقم التصنيف: ", ShortName = "رقم التصنيف", Order = 5, AutoGenerateField = true)]
        [Required(AllowEmptyStrings = false, ErrorMessage = "يجب ادخال رقم التصنيف.")]
        public virtual string Number
        {
            get { return number; }
            set { SetValue<string>("Number", ref number, value); }
        }

        #endregion

        public override bool IsEmpty
        {
            get { return ItemCategoryID == 0; }
        }

        public override bool Equals(object obj)
        {
            if (!base.Equals(obj)) return false;

            ItemCategory itemCategory = obj as ItemCategory;

            if (!itemCategory.ItemCategoryID.Equals(this.ItemCategoryID)) return false;

            return true;
        }
    }
}
